<?php
/**
 * SDOFeeds 动态协议的相关封装
 * 底层接口联系人 李建01	动态协议 电话 7742
 * 接口需求人 刘海涛01  电话 1271
 * svn 文档
 *   svn://192.168.90.69/PY_DOC/统一关系对外接口文档/动态详细格式定义(Json).docx
 * 户名与密码都是 sdodoc
 * <code>
 * SDOFeeds::addActivity($paramArray,$appId);
 * </code>
 * @category   SDO
 * @package    Activity
 * @author     ggg <wangweijun01@snda.com> 2010-3-15 17:20
 * @copyright  SDO OP
 * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
 * @link       http://www.sdo.com/
 * @since      File available since Release 1.0.0
 */
include_once(dirname(__FILE__).'/SDOSocket.php');

class SDOFeeds {

	/**
	 * 上传系统预定义动态.
	 * @param Array $paramArray  动态信息,数组格式
	 * @param int $appId   上传该动态的应用
	 * @return  Array
	 */
	static public function addActivity($paramArray,$appId)
	{
		
		$params	 = json_encode($paramArray);

		//xml 或者json
		$format	= 'json';

		$api_name	= 'ActivityService.addActivity';
		$api_param	= array(
			'param' => $params
			,'format' => $format
			,'appId' => $appId
		);


		return self::send($api_name,$api_param);	

	}


 	/**
	 * 上传自定义动态.
	 * @param Long $sdId  用户ID
	 * @param int $templateId  模板ID
	 * @param Array $titleArray   自定义了一些变量（如Feed 标题：{actor}
	 * 		完成了问卷{title}得分{mark}），那么你必须
	 * 		在此项中为这些变量（{actor}是系统变量，
	 * 		不需要赋值）赋值，
	 * 		例如此项值为： {"title":" 语文课","mark":"90"}，
	 * @param Array $bodyArray 规则同titleArray项
	 * @param Int $appId 应用ID
	 * @return   ( [updateTime] => 1269410908210 [success] => 1 ) 
	 */
	static public function addTemplatizedActivity($sdId,$templateId,$titleArray,$bodyArray,$appId)
	{
		$title_data_str	 = json_encode($titleArray);
		$body_data_str	 = json_encode($bodyArray);

		$api_name	= 'ActivityService.addTemplatizedActivity';
		$api_param	= array(
			'sdId' => $sdId
			,'templateId' => $templateId
			,'titlData' => $title_data_str
			,'bodyData' => $body_data_str
			,'createTime' => date("Y-m-d H:i:s")
			,'appId' => $appId
		);


		return self::send($api_name,$api_param);	

	}




 	/**
	 * 获取用户接收到的好友动态信息
	 * @param long $receiverId 动态接收者的ID
	 * @param int $startIndex 分页查询时的开始位置
	 * @param int $count 查询记录条数
	 * @return  Array
	 */
	static public function getFriendFeeds($receiverId,$startIndex=1,$count=100)
	{
		$api_name	= 'ActivityService.getFriendFeeds';
		$api_param	= array(
			'receiverId' => $receiverId
			,'startIndex' => $startIndex
			,'count' => $count
		);


		return self::send($api_name,$api_param);	
	}



 	/**
	 * 获取用户接收到的好友动态信息，指定动态类型
	 * @param long $receiverId 动态接收者的ID
	 * @param Int[] $activityType  接收的动态类型  传数组 Array(1,3,5);
	 * @param int $startIndex 分页查询时的开始位置
	 * @param int $count 查询记录条数
	 * @return  Array
	 */
	static public function getFriendFeedsByActivityType($receiverId,$activityType,$startIndex=1,$count=100)
	{
		$api_name	= 'ActivityService.getFriendFeedsByActivityType';
		$api_param	= array(
			'receiverId' => $receiverId
			,'activityType' => implode(',',$activityType)
			,'startIndex' => $startIndex
			,'count' => $count
		);
		return self::send($api_name,$api_param);	
	}


 	/**
	 * 获取用户自己的动态信息
	 * @param long $receiverId 动态接收者的ID
	 * @param int $startIndex 分页查询时的开始位置
	 * @param int $count 查询记录条数
	 * @return  Array
	 */
	static public function getSelfFeeds ($receiverId,$startIndex=1,$count=100)
	{
		$api_name	= 'ActivityService.getSelfFeeds';
		$api_param	= array(
			'receiverId' => $receiverId
			,'startIndex' => $startIndex
			,'count' => $count
		);


		return self::send($api_name,$api_param);	
	}


 	/**
	 * 获取用户自己的动态信息, 指定动态类型
	 * @param long $receiverId 动态接收者的ID
	 * @param Int[] $activityType  接收的动态类型  传数组 Array(1,3,5);
	 * @param int $startIndex 分页查询时的开始位置
	 * @param int $count 查询记录条数
	 * @return  Array
	 */
	static public function getSelfFeedsByActivityType($receiverId,$activityType,$startIndex=1,$count=100)
	{
		$api_name	= 'ActivityService.getSelfFeedsByActivityType';
		$api_param	= array(
			'receiverId' => $receiverId
			,'activityType' => implode(',',$activityType)
			,'startIndex' => $startIndex
			,'count' => $count
		);
		return self::send($api_name,$api_param);	
	}

//------------------
 	/**
	 * 获取用户最新的动态信息.
	 * @param long $receiverId 动态接收者的ID
	 * @param int $startIndex 分页查询时的开始位置
	 * @param int $count 查询记录条数
	 * @return  Array
	 * (    [entry] => Array
	 *         (
	 *             [0] => Array
	 *                 (
	 *                     [value] => Array
	 *                         (
	 *                             [f_sdIds] => Array
	 *                                 (
	 *                                     [0] => 1
	 *                                     [1] => 2
	 *                                 )
	 * 
	 *                             [inviteType] => 1
	 *                             [activityType] => 100
	 *                             [createTime] => 2010-03-15 09:31:01
	 *                             [sdId] => 1
	 *                             [fromApp] => 123
	 *                         )
	 *                 )
	 *         )
	 * 
	 *     [itemsPerPage] => 1
	 *     [startIndex] => 1
	 *     [totalResults] => 2
	 * )
	 * 
	 */
	static public function getLatestFeeds($receiverId,$startIndex=1,$count=100)
	{
		$api_name	= 'ActivityService.getLatestFeeds';
		$api_param	= array(
			'receiverId' => $receiverId
			,'startIndex' => $startIndex
			,'count' => $count
		);


		return self::send($api_name,$api_param);	
	}

 	/**
	 * 获取指定用户的好友动态信息. 该接口还未提供
	 * @param long $receiverId 动态接收者的ID
	 * @param Int[] $categories 接收的动态类型  传数组 Array(1,3,5);
	 * @param int $startIndex 分页查询时的开始位置
	 * @param int $count 查询记录条数
	 * @return  Array
	 */
	static public function getLatestFeedsByActivityType($receiverId,$categories,$startIndex=1,$count=10)
	{
		$api_name	= 'ActivityService.getLatestFeedsByActivityType';
		$api_param	= array(
			'receiverId' => $receiverId
//			,'categories' => json_encode($categories)
			,'categories' => implode(',',$categories)
			,'startIndex' => $startIndex
			,'count' => $count
		);


		return self::send($api_name,$api_param);	
	}


 	/**
	 * 应用注册自定的动态消息模板.
	 * @param int $appId  注册该模板的应用
	 * @param String $feedTitle  消息标题模板
	 * @param String $feedContent  消息内容模板
	 * @return Array 返回新注册的模板对象
	 *(
	 *    [entry] => Array
	 *        (
	 *            [0] => Array
	 *                (
	 *                    [value] => Array
	 *                        (
	 *                            [id] => 1
	 *                            [createTime] => 1269415176
	 *                            [appId] => 40
	 *                            [lastModifyTime] => 1269415176
	 *                            [templateId] => 90000000001
	 *                            [feedTitle] => {a}bit{b}
	 *                            [feedContent] => {a}bit{b} content
	 *                        )
	 *
	 *                )
	 *
	 *        )
	 *
	 *    [itemsPerPage] => 1
	 *    [startIndex] => 0
	 *    [totalResults] => 1
	 *)

	 */
	static public function registerTemplate($appId,$feedTitle,$feedContent)
	{

		$api_name	= 'FeedTemplateService.registerTemplate';
		$api_param	= array(
			'appId' => $appId
			,'feedTitle' => $feedTitle
			,'feedContent' => $feedContent
		);


		return self::send($api_name,$api_param);	

	}



 	/**
	 * 应用查询所有自定义动态消息模板.
	 * @param int $appId  注册该模板的应用
	 * @return Array 返回模板对象
	 * (
	 *     [entry] => Array
	 *         (
	 *             [0] => Array
	 *                 (
	 *                     [value] => Array
	 *                         (
	 *                             [id] => 1
	 *                             [createTime] => 1269415176
	 *                             [appId] => 40
	 *                             [lastModifyTime] => 1269415176
	 *                             [templateId] => 90000000001
	 *                             [feedTitle] => {a}bit{b}
	 *                             [feedContent] => {a}bit{b} content
	 *                         )
	 *                 )
	 *         )
	 * 
	 *     [itemsPerPage] => 1
	 *     [startIndex] => 0
	 *     [totalResults] => 1
	 *)
	 *  如失败失败 Array ( [httpCode] => 400 [msg] => 2003: ItemNotFoundException ) 
	 * httpCode 孙宁 这个是按照http语义的，如果是serviceNotFound之类就是404
	 */

	static public function getTemplate($appId)
	{
		$api_name	= 'FeedTemplateService.getTemplate';
		$api_param	= array(
			'appId' => $appId
		);
		return self::send($api_name,$api_param);	
	}
 

 	/**
	 * 根据模板ID 查询自定义动态消息模板
	 * @param int $templateId  注册该模板时Server 生成的模板ID
	 * @return Array 返回模板对象 参考  getTemplate
	 */
	static public function getTemplateByTemplateId($templateId)
	{
		$api_name	= 'FeedTemplateService.getTemplateByTemplateId';
		$api_param	= array(
			'templateId' => $templateId
		);
		return self::send($api_name,$api_param);	
	
	}

 	/**
	 * 根据模板ID 删除模板  ?? 目前发现传任何模板ID都会返回成功
	 * @param Long $templateId  注册该模板时Server 生成的模板ID
	 * @return Array Array ( [updateTime] => 1269417720620 [success] => 1 )  
	 */
	static public function deleteTemplateByTemplateId($templateId)
	{
		$api_name	= 'FeedTemplateService.deleteTemplateByTemplateId';
		$api_param	= array(
			'templateId' => $templateId
		);
		$result	= self::send($api_name,$api_param);	
		return $result;

	}

	/**
	 * 向服务器端发起请求
	 * @param String $apiName API名称
	 * @param Array $apiParam API相关参数
	 * 返回调用的结果
	 *
	 */
	static public function send($apiName,$apiParam)
	{
		//$result	= SDOSocket::httpRequest($apiName,$apiParam);
		$result	= SDOSocket::send($apiName,$apiParam);
		return $result;
	}

   /*
     * 检查返回是否正常
     * @param $result 调用send后的结果
     * @param $Error 返回错误码与信息
     * @return boolean
     */
    static function isError(&$result, &$Error = NULL)
    {
        return SDOSocket::isError($result,$Error);
    }


}